package vo;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;

public class FuncionarioDAO {

	public void salvarFuncionario(FuncionarioVO funcionario) {

		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		PessoaVO pessoa = funcionario.getPessoaVO();
		session.saveOrUpdate(pessoa);
		funcionario.setIdpessoa(pessoa.getId());
		session.saveOrUpdate(funcionario);

		transaction.commit();

	}

	public void excluir(FuncionarioVO funcionario) {
		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		session.delete(funcionario);
		session.delete(funcionario.getPessoaVO());

		transaction.commit();
	}

	@SuppressWarnings("unchecked")
	public List<FuncionarioVO> consultarFuncionario(FuncionarioVO funcionarioVO) {

		List<FuncionarioVO> ListadeFuncionario = new ArrayList<FuncionarioVO>();

		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();
		
		Criteria query = session.createCriteria(FuncionarioVO.class);
		
		query.createAlias("pessoaVO", "pessoaVO");
		if (funcionarioVO.getPessoaVO().getNome() != null && !funcionarioVO.getPessoaVO().getNome().equals("")) {
			query.add(Restrictions.like("pessoaVO.nome", funcionarioVO.getPessoaVO().getNome()+"%"));
		}

		ListadeFuncionario = query.list();

		transaction.commit();
		return ListadeFuncionario;
	}

	public FuncionarioVO logar(FuncionarioVO vo) {
		
		
		FuncionarioVO usuarioLogado = new FuncionarioVO();

		Session session = HibernateUtil.currentSession();
		Transaction transaction = session.beginTransaction();

		Criteria criteria = session.createCriteria(FuncionarioVO.class)
				.add(Restrictions.eq("login", vo.getLogin()))
				.add(Restrictions.eq("senha", vo.getSenha()));

		usuarioLogado = (FuncionarioVO) criteria.uniqueResult();

		transaction.commit();
		return usuarioLogado;
	}

}
